useEffect(() => {}, [xxx]);

let _deps; // 存储上一次的依赖
function useEffect(callback, depArrays) {
  const hasNoDeps = !depArrays;
  const needUpdate = depArrays.every((el, i) => el !== _deps[i]);

  // 判断回调函数是否是个函数
  if (typeof callback !== "function")
    throw new TypeError("args1 must function");

  // 1.如果deepArrays 需要更新
  // 2.如果第一次没有依赖
  if (needUpdate || hasNoDeps) {
    callback && callback();
    _deps = depArrays;
  }
}

/**
 * 解释，第二个参数为空数据时候， 只执行一次，因为空数据， needUpdate 始终为 false
 * 如果第二个参数是空，undefined， 那么每一次都会执行，因为hasNoDeps 始终为true
 */

function useEffect1(callback, depArrays) {
  const hasNoDeps = !depArrays;

  const needUpdate = depArrays.every((el, i) => el !== _deps[i]);

  if (typeof callback !== "function") throw new TypeError("arg1 need function");
  if (hasNoDeps || needUpdate) {
    _deps = depArrays;
    callback && callback();
  }
}
